package com.todo.controller;

import com.todo.dto.Result;
import com.todo.dto.TeamMemberChangeDTO;
import com.todo.mapper.TIDMapper;
import com.todo.service.ITeamService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;

@RestController
@Slf4j
@Api(tags = "团队相关接口")
@RequestMapping("/team")
public class TeamController {
    @Resource
    private ITeamService teamService;

    @Resource
    private TIDMapper tidMapper;
    //根据用户uid创建团队

    /**
     * 根据用户uid创建团队，并返回团队tid uid从线程中获取
     * @return
     */

    @PostMapping("/createTeam/{teamName}")
    @ApiOperation("创建团队")
    public Result createTeam(@PathVariable String teamName){
        log.info("调用创建团队接口:{}",teamName);
        return teamService.createTeam(teamName);
    }

    //根据团队tid与用户uid，将用户添加进入团队
    /**
     * 通过uid与tid将该uid用户拉入tid团队中
     * @param uid
     * @param tid
     * @return
     */
    @PostMapping("/inviteMember/{uid},{tid}")
    @ApiOperation("根据uid与tid将用户加入团队")
    public Result inviteMember(@PathVariable String uid, @PathVariable String tid){
        log.info("调用添加团队成员接口");
        return teamService.inviteMember(uid,tid);
    }

    /**
     * 根据团队id与用户uid，将用户删除团队
     */
    @PostMapping("/delMember/{uid},{tid}")
    @ApiOperation("根据成员uid 团队tid将团队成员移除团队\n" +
            "传入自身uid则是推出团队操作 团队所有者不能自主退出 ")
    public Result delMember(@PathVariable String uid,@PathVariable String tid){
        log.info("调用删除团队成员接口");
        return teamService.delMember(uid,tid);
    }


    /**根据团队id解散团队
     * @param tid
     * @return
     */
    @PostMapping("/dropTeam/{tid}")
    @ApiOperation("根据tid删除该团队")
    public Result dropTeam(@PathVariable String tid){
        log.info("调用删除团队接口："+tid);
        return teamService.dropTeam(tid);
    }

    /**
     * 根据团队tid查询团队基础信息
     * @param tid
     * @return data中存为团队基础信息对象
     */
    @GetMapping("/getTeamBaseInfo/{tid}")
    @ApiOperation("根据tid查询团队基础信息")
    public Result getTeam(@PathVariable String tid){
        return teamService.getTeam(tid);
    }

    //修改团队信息 t_full_info t_base_info

    /**
     * 查询团队详细信息
     */
    @GetMapping("/getTeamFullInfo/{tid}")
    @ApiOperation("根据tid查询团队详细信息")
    public Result getTeamDetail(@PathVariable String tid){
        return teamService.getTeamDetail(tid);
    }
    /**
     * 查询团队成员列表
     */
    @GetMapping("/queryTeamMemberList/{tid}")
    @ApiOperation("根据tid查询团队成员列表")
    public Result queryTeamMemberList(@PathVariable String tid){
        return teamService.queryTeamMemberList(tid);
    }
    /**
     * 修改团队成员权限 管理员数量不能超过10
     */
    @PostMapping("/changePrivilege")
    @ApiOperation("更改团队成员权限")
    public Result changePrivilege(@RequestBody TeamMemberChangeDTO teamMemberChangeDTO){
        log.info("更改团队成员传入参数：{}",teamMemberChangeDTO );
        return teamService.changePrivilege(teamMemberChangeDTO);
    }

    /**
     * 转让团队所有者
     */
}
